package system

import (
	"errors"
	"liuche17.cn/go-blog/server/global"
	"liuche17.cn/go-blog/server/model/system"
	"liuche17.cn/go-blog/server/model/system/req"
	"liuche17.cn/go-blog/server/tools"
)

type UserService struct{}

// VerifyUser 考验用户信息
func (s *UserService) VerifyUser(u req.UserLogin) (string, error) {
	// 查询用户信息
	var user system.User
	err := global.GB_DB.Where("username = ?", u.Username).First(&user).Error
	if err == nil {
		// 密码验证成功
		if ok := tools.ComparePwd(user.Password, u.Password); ok {
			// 得到权限信息
			var userRole system.UserRole
			_ = global.GB_DB.Where("username = ?", user.Username).First(&userRole).Error
			// 生成 token 并返回
			var jwtUser = system.JwtUser{
				Id:   user.ID,
				Role: userRole.Role,
			}
			token, _ := tools.GenerateToken(jwtUser)
			return token, err
		} else {
			return "", errors.New("密码校验不通过！")
		}
	}

	return "", err
}

// GetUserInfo 根据用户id获取用户信息
func (*UserService) GetUserInfo(id uint64) (*system.User, error) {
	var userInfo system.User
	err := global.GB_DB.Where("id = ?", id).First(&userInfo).Error
	if err != nil {
		return nil, err
	}

	return &userInfo, nil
}

// UpdateUserPwd 修改用户密码
func (s *UserService) UpdateUserPwd(pwd string) error {
	// 加密密码
	newPwd := tools.GetPwd(pwd)
	global.GB_DB.Model(&system.User{}).Where("id = ?", global.GB_USER.Id).Update("password", newPwd)
	return nil
}
